home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / lib / include / tclUnix.h < prev    next >
C/C++ Source or Header  |  1991-10-10  |  6KB  |  232 lines

  1. /*
  2.  * tclUnix.h --
  3.  *
  4.  *    This file reads in UNIX-related header files and sets up
  5.  *    UNIX-related macros for Tcl's UNIX core.  It should be the
  6.  *    only file that contains #ifdefs to handle different flavors
  7.  *    of UNIX.  This file sets up the union of all UNIX-related
  8.  *    things needed by any of the Tcl core files.  This file
  9.  *    depends on configuration #defines in tclConfig.h
  10.  *
  11.  *    The material in this file was originally contributed by
  12.  *    Karl Lehenbauer, Mark Diekhans and Peter da Silva.
  13.  *
  14.  * Copyright 1991 Regents of the University of California
  15.  * Permission to use, copy, modify, and distribute this
  16.  * software and its documentation for any purpose and without
  17.  * fee is hereby granted, provided that this copyright
  18.  * notice appears in all copies.  The University of California
  19.  * makes no representations about the suitability of this
  20.  * software for any purpose.  It is provided "as is" without
  21.  * express or implied warranty.
  22.  *
  23.  * $Header: /sprite/src/lib/tcl/RCS/tclUnix.h,v 1.16 91/09/22 16:06:33 ouster Exp $ SPRITE (Berkeley)
  24.  */
  25.  
  26. #ifndef _TCLUNIX
  27. #define _TCLUNIX
  28.  
  29. /*
  30.  * The following #defines are used to distinguish between different
  31.  * UNIX systems.  These #defines are normally set by the "config" script
  32.  * based on information it gets by looking in the include and library
  33.  * areas.  The defaults below are for BSD-based systems like SunOS
  34.  * or Ultrix.
  35.  *
  36.  * TCL_GETTOD -            1 means there exists a library procedure
  37.  *                "gettimeofday" (e.g. BSD systems).  0 means
  38.  *                have to use "times" instead.
  39.  * TCL_GETWD -            1 means there exists a library procedure
  40.  *                "getwd" (e.g. BSD systems).  0 means
  41.  *                have to use "getcwd" instead.
  42.  * TCL_SYS_ERRLIST -        1 means that the array sys_errlist is
  43.  *                defined as part of the C library.
  44.  * TCL_SYS_TIME_H -        1 means there exists an include file
  45.  *                <sys/time.h>.
  46.  * TCL_SYS_WAIT_H -        1 means there exists an include file
  47.  *                <sys/wait.h> that defines constants related
  48.  *                to the results of "wait".
  49.  * TCL_UNION_WAIT -        1 means that the "wait" system call returns
  50.  *                a structure of type "union wait" (e.g. BSD
  51.  *                systems).  0 means "wait" returns an int
  52.  *                (e.g. System V and POSIX).
  53.  */
  54.  
  55. #define TCL_GETTOD 1
  56. #define TCL_GETWD 1
  57. #define TCL_SYS_ERRLIST 1
  58. #define TCL_SYS_TIME_H 1
  59. #define TCL_SYS_WAIT_H 1
  60. #define TCL_UNION_WAIT 1
  61.  
  62. #include <errno.h>
  63. #include <fcntl.h>
  64. #include <limits.h>
  65. #include <pwd.h>
  66. #include <signal.h>
  67. #include <time.h>
  68. #include <sys/param.h>
  69. #include <sys/types.h>
  70. #include <dirent.h>
  71. #include <sys/file.h>
  72. #include <sys/stat.h>
  73. #if TCL_SYS_TIME_H
  74. #   include <sys/time.h>
  75. #endif
  76. #if TCL_SYS_WAIT_H
  77. #   include <sys/wait.h>
  78. #endif
  79.  
  80. #ifdef sprite
  81. #include <sys/dir.h>
  82. #define dirent direct
  83. #endif
  84.  
  85. /*
  86.  * Not all systems declare the errno variable in errno.h. so this
  87.  * file does it explicitly.  The list of system error messages also
  88.  * isn't generally declared in a header file anywhere.
  89.  */
  90.  
  91. extern int errno;
  92. extern int sys_nerr;
  93. extern char *sys_errlist[];
  94.  
  95. /*
  96.  * The type of the status returned by wait varies from UNIX system
  97.  * to UNIX system.  The macro below defines it:
  98.  */
  99.  
  100. #if TCL_UNION_WAIT
  101. #   define WAIT_STATUS_TYPE union wait
  102. #else
  103. #   define WAIT_STATUS_TYPE int
  104. #endif
  105.  
  106. /*
  107.  * Supply definitions for macros to query wait status, if not already
  108.  * defined in header files above.
  109.  */
  110.  
  111. #ifndef WIFEXITED
  112. #   define WIFEXITED(stat)  (((*((int *) &(stat))) & 0xff) == 0)
  113. #endif
  114.  
  115. #ifndef WEXITSTATUS
  116. #   define WEXITSTATUS(stat) (((*((int *) &(stat))) >> 8) & 0xff)
  117. #endif
  118.  
  119. #ifndef WIFSIGNALED
  120. #   define WIFSIGNALED(stat) (((*((int *) &(stat)))) && ((*((int *) &(stat))) == ((*((int *) &(stat))) & 0x00ff)))
  121. #endif
  122.  
  123. #ifndef WTERMSIG
  124. #   define WTERMSIG(stat)    ((*((int *) &(stat))) & 0x7f)
  125. #endif
  126.  
  127. #ifndef WIFSTOPPED
  128. #   define WIFSTOPPED(stat)  (((*((int *) &(stat))) & 0xff) == 0177)
  129. #endif
  130.  
  131. #ifndef WSTOPSIG
  132. #   define WSTOPSIG(stat)    (((*((int *) &(stat))) >> 8) & 0xff)
  133. #endif
  134.  
  135. /*
  136.  * Supply macros for seek offsets, if they're not already provided by
  137.  * an include file.
  138.  */
  139.  
  140. #ifndef SEEK_SET
  141. #   define SEEK_SET 0
  142. #endif
  143.  
  144. #ifndef SEEK_CUR
  145. #   define SEEK_CUR 1
  146. #endif
  147.  
  148. #ifndef SEEK_END
  149. #   define SEEK_END 2
  150. #endif
  151.  
  152. /*
  153.  * The stuff below is needed by the "time" command.  If this
  154.  * system has no gettimeofday call, then must use times and the
  155.  * CLK_TCK #define (from sys/param.h) to compute elapsed time.
  156.  * Unfortunately, some systems only have HZ and no CLK_TCK, and
  157.  * some might not even have HZ.
  158.  */
  159.  
  160. #if ! TCL_GETTOD
  161. #   include <sys/times.h>
  162. #   include <sys/param.h>
  163. #   ifndef CLK_TCK
  164. #       ifdef HZ
  165. #           define CLK_TCK HZ
  166. #       else
  167. #           define CLK_TCK 60
  168. #       endif
  169. #   endif
  170. #endif
  171.  
  172. /*
  173.  * Define access mode constants if they aren't already defined.
  174.  */
  175.  
  176. #ifndef F_OK
  177. #    define F_OK 00
  178. #endif
  179. #ifndef X_OK
  180. #    define X_OK 01
  181. #endif
  182. #ifndef W_OK
  183. #    define W_OK 02
  184. #endif
  185. #ifndef R_OK
  186. #    define R_OK 04
  187. #endif
  188.  
  189. /*
  190.  * Make sure that MAXPATHLEN is defined.
  191.  */
  192.  
  193. #ifndef MAXPATHLEN
  194. #   ifdef _POSIX_PATH_MAX
  195. #       define MAXPATHLEN _POSIX_PATH_MAX
  196. #   else
  197. #       define MAXPATHLEN 2048
  198. #   endif
  199. #endif
  200.  
  201. /*
  202.  * Variables provided by the C library:
  203.  */
  204.  
  205. extern char **environ;
  206.  
  207. /*
  208.  * Library procedures used by Tcl but not declared in a header file:
  209.  */
  210.  
  211. extern int    access    _ANSI_ARGS_((char *path, int mode));
  212. extern int    chdir    _ANSI_ARGS_((char *path));
  213. extern int    close    _ANSI_ARGS_((int fd));
  214. extern int    dup2    _ANSI_ARGS_((int src, int dst));
  215. extern int    execvp    _ANSI_ARGS_((char *name, char **argv));
  216. extern int    _exit     _ANSI_ARGS_((int status));
  217. extern int    fork    _ANSI_ARGS_((void));
  218. extern int    geteuid    _ANSI_ARGS_((void));
  219. extern int    getpid    _ANSI_ARGS_((void));
  220. extern char *    getcwd  _ANSI_ARGS_((char *buffer, int size));
  221. extern char *    getwd   _ANSI_ARGS_((char *buffer));
  222. extern int    kill    _ANSI_ARGS_((int pid, int sig));
  223. extern long    lseek    _ANSI_ARGS_((int fd, int offset, int whence));
  224. extern char *    mktemp    _ANSI_ARGS_((char *template));
  225. extern int    open    _ANSI_ARGS_((char *path, int flags, int mode));
  226. extern int    pipe    _ANSI_ARGS_((int *fdPtr));
  227. extern int    read    _ANSI_ARGS_((int fd, char *buf, int numBytes));
  228. extern int    unlink    _ANSI_ARGS_((char *path));
  229. extern int    write    _ANSI_ARGS_((int fd, char *buf, int numBytes));
  230.  
  231. #endif /* _TCLUNIX */
  232.